package com.hk.demo04;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.ComponentScans;
import org.springframework.stereotype.Controller;

import java.util.Date;

/**
 *  启动类:
 *    1、main方法做了什么？
 *          创建了一个容器 Spring容器
 *    2、@SpringBootApplication 这个做了什么？
 *       @SpringBootConfiguration     配置类注解 、可以在当前的类中进行配置
         @EnableAutoConfiguration     自动装配类型
               1、@Import(AutoConfigurationImportSelector.class)    把 AutoConfigurationImportSelector 类添加到 ioc容器中
               2、AutoConfigurationImportSelector 这个类
                    会去 META-INF/spring.factories  加载自动装配的类
               3、加载 xxx 自动装配类

         @ComponentScan
              扫描包下面的的类、通过扫描注解、添加对象到ioc容器中

      tomcat 如何启动的?
      1、spring-boot-starter-web 这个里面 有嵌入tomcat
      2、tomcat 使用java写的、可以通过spring来管理对象\容器创建的时候可以启动tomcat

 */
@SpringBootApplication
public class Demo04Application {

    // 启动了spring 容器
    public static void main(String[] args) {

        //01 拿到容器
        ApplicationContext app = SpringApplication.run(Demo04Application.class, args);
        System.out.println("app = " + app);

        //02 容器中有啥东西
        String[] beanDefinitionNames = app.getBeanDefinitionNames();

        for (String name : beanDefinitionNames) {
            System.out.println("name = " + name);
        }
    }

    @Bean
    public Date date(){
        return new Date();
    }

}
